Completed
Push — master ( 1fc2c9...675e71 )
by greg
01:46
created

assets.js ➔ ... ➔ ???   A

Complexity

Conditions 3
Paths 5

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
c 0
b 0
f 0
nc 5
dl 0
loc 10
rs 9.4285
nop 1
1
import fse from 'fs-extra'
2
import dircompare from 'dir-compare'
3
import mkdirp from 'mkdirp'
4
import path from 'path'
5
6
import {
7
  cmsTemplates,
8
  FileParser,
9
  config
10
} from '../../'
11
12
export function copy(pathAssets) {
13
  var publicFolders = cmsTemplates.assets.getFolder(pathAssets)
14
  let publish = config.publish.url
15
  var dest = path.join(config.root, publish)
16
  try {
17
    var directory = fse.lstatSync(dest)
18
    if (!directory.isDirectory()) {
19
      mkdirp.sync(dest)
20
    }
21
  } catch (e) {
22
    mkdirp.sync(dest)
23
  }
24
25
  Array.prototype.forEach.call(publicFolders, (publicFolder) => {
26
    var res = dircompare.compareSync(publicFolder, dest, {compareSize: true})
27
28
    res.diffSet.forEach(function (entry) {
29
      var state = {
30
        'equal' : '==',
31
        'left' : '->',
32
        'right' : '<-',
33
        'distinct' : '<>'
34
      }[entry.state]
35
36
      var name1 = entry.name1 ? entry.name1 : ''
37
      var name2 = entry.name2 ? entry.name2 : ''
38
39
      let exclude =  new RegExp(config.files.exclude)
40
      if(!exclude.test(name1) && !exclude.test(name2) && entry.type1 !== 'directory' && entry.type2 !== 'directory') {
41
        
42
        if(typeof entry.path1 !== 'undefined' && entry.path1 !== null) {
43
          var original = entry.path1
44
          var basePath = original.replace(publicFolder, '')
45
          var move = path.join(dest, basePath)
46
47
          if(entry.type2 === 'missing' || entry.state === 'distinct') {
48
            fse.removeSync(move)
49
            fse.copySync(original, move)
50
          }
51
        }
52
      }
53
    })
54
  })
55
56
  return publicFolders
57
}
58
59
export function getFolder(pathAssets = '') {
60
  var folder = path.join(config.root, pathAssets.replace(config.root, '')).replace(/\/$/, '')
61
  var assetsFolders = []
62
  var flatten = true
63
64
  let templates = config.templates.url
65
  let assets = config.files.templates.assets
66
  pathAssets = path.join(folder, templates)
67
68
  try {
69
    var directory = fse.lstatSync(pathAssets)
70
    if (directory.isDirectory()) {
71
      var arr = FileParser.read(pathAssets, pathAssets, 'files', flatten, /(.*?)/, 99)
72
73
      // now check if file for folder exist
74
      Array.prototype.forEach.call(arr, (file) => {
75
        var folderName = file.path.replace(/\..+$/, '') + assets
76
        try {
77
          var directory = fse.lstatSync(folderName)
78
          if (directory.isDirectory()) {
79
            assetsFolders.push(folderName)
80
          }
81
        } catch (e) {
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
82
        }
83
      })
84
    }
85
  } catch (e) {
0 ignored issues
show
Coding Style Comprehensibility Best Practice introduced by
Empty catch clauses should be used with caution; consider adding a comment why this is needed.
Loading history...
86
  }
87
88
  return assetsFolders
89
}